import { request } from './request';

/**
 * 地图工具类 - 封装地图相关操作
 */
const QQMapWX = require('qqmap-wx-jssdk');
const qqmapsdk = new QQMapWX({
  key: '5GABZ-VA56B-JMMUJ-NES7G-7CPG5-6EBFG' // 使用项目已有的地图密钥
});

/**
 * 获取当前位置
 */
export function getLocation() {
  return new Promise((resolve, reject) => {
    uni.getLocation({
      type: 'gcj02',
      success: res => resolve(res),
      fail: err => reject(err)
    });
  });
}

/**
 * 逆地址解析（经纬度转地址）
 * @param {number} latitude - 纬度
 * @param {number} longitude - 经度
 * @param {boolean} useBackend - 是否使用后端API（默认false，使用前端SDK）
 * @returns {Promise} - 返回包含地址信息的Promise
 */
export function reverseGeocoder(latitude, longitude, useBackend = false) {
 
    // 使用后端API
    return new Promise((resolve, reject) => {
      request({
        url: `txmap/reverseGeocoder`,
        method: 'GET',
        data: {
          latitude,
          longitude
        },
        success: (res) => {
          if (res.data.code === 1) {
            resolve(res.data.data);
          } else if (res.data.status === 0) {
            // 兼容不同的返回格式
            resolve(res.data.result);
          } else {
            reject(new Error(res.data.msg || res.data.message || '地理编码失败'));
          }
        },
        fail: (err) => {
          reject(err);
        }
      });
    });
}

/**
 * 地址搜索
 */
export function searchLocation(keyword, region = '广州市') {
  return new Promise((resolve, reject) => {
    qqmapsdk.getSuggestion({
      keyword,
      region,
      success: res => resolve(res),
      fail: err => reject(err)
    });
  });
}

/**
 * 计算两点之间的距离
 */
export function calculateDistance(lat1, lng1, lat2, lng2) {
  return new Promise((resolve, reject) => {
    qqmapsdk.calculateDistance({
      from: { latitude: lat1, longitude: lng1 },
      to: [{ latitude: lat2, longitude: lng2 }],
      success: res => {
        if (res.result && res.result.elements && res.result.elements.length > 0) {
          resolve(res.result.elements[0].distance);
        } else {
          reject(new Error('计算距离失败'));
        }
      },
      fail: err => reject(err)
    });
  });
}